竟然没任何保护
1 | # checksec ./020d04ea8f10ac07c5b83f3d0910108b |
基本上这种情形就是执行shellcode
漏洞在storeCheckedIP,只要绕过ip检查即可进入这里
1 | int __cdecl storeCheckedIP(char *src) |
这两个检查是validateSize和validateIP
1 | v6 = validateSize(&s); |
size是大于1,小于0x28,这个strlen只要00截断即可,但是上面的strcpy也是00截断,这个肯定不行的,结果一看这个v2是8位unsigned整形,可以整数溢出啊
1 | _BOOL4 __cdecl validateSize(char *s) |
检测ip的(其中inet_pton是将“点分十进制” -> “二进制整数”)
但是这里遇到.就直接返回了,这个就棘手了
后来发现10是ipv6的地址,汗~
1 | int __cdecl validateIP(int input) |
ip示例
1 | # ./020d04ea8f10ac07c5b83f3d0910108b |
而且ip那里特意给了个.截断,最终exp
1 | # -*- coding: utf-8 -*- |